package co.gov.medellin.ssti.sub.model.service;

import java.util.Collection;
import java.util.List;

import co.gov.medellin.ssti.sub.model.vo.AreaVO;
import co.gov.medellin.ssti.sub.model.vo.UsuarioSubprogramaVO;
import co.gov.medellin.ssti.sub.paoyer.administration.model.vo.UserVO;

public interface UsuarioSubprogramaService {
	/**
	 * Metodo que consulta los usuarios en paoyer. Si condicion no es empty,
	 * consulta aquellos cuyo NOMBRE o DESCRIPCION sean parecidos a condicion.
	 * 
	 * @param condicion
	 * @return
	 * 
	 */
	Collection<UsuarioSubprogramaVO> findUsuarios(String condicion);

	/**
	 * Metodo que consulta el CODIGO en TCS_BEN_SUBPROGRAMA_SEDE cuyo
	 * SEDE_CODIGO = codeSede y SBPR_CODIGO = codeSubprograma
	 * 
	 * @param codeSubprograma
	 *            Codigo del subprograma.
	 * @param codeSede
	 *            Codigo de la sede.
	 * @return Codigo del registro correspondiente en TCS_BEN_SUBPROGRAMA_SEDE.
	 * 
	 */
	long findSubprogramaSede(Long codeSubprograma, Long codeSede);

	/**
	 * 
	 * @param codeSubprograma
	 *            Codigo del subprograma.
	 * @param codeSede
	 *            Codigo de la sede.
	 * @param codePrograma
	 *            Codigo del programa.
	 * @param codeUsuario
	 *            Codigo del usuario.
	 * @return
	 * 
	 */
	Collection<UsuarioSubprogramaVO> findNombres(Long codeSubprograma,
			Long codeSede, Long codePrograma, Long codeUsuario);

	/**
	 * Metodo que consulta en TCS_BEN_USUARIO_SEDE si es valido el usuario
	 * identificado con USU_CODIGO = codeUsuario y SPSE_CODIGO =
	 * codeSubprogramaSede
	 * 
	 * @param codeUsuario
	 *            Codigo del usuario.
	 * @param codeSubprogramaSede
	 *            codigo subprogramasede SPSE_CODIGO
	 * @return true si la consulta retorna el registro, false de lo contrario.
	 * 
	 */
	boolean isUsuarioValido(Long codeUsuario, Long codeSubprogramaSede);

	/**
	 * Metodo que realiza un INSERT en TCS_BEN_USUARIO_SEDE(CODIGO,USU_CODIGO,
	 * SPSE_CODIGO) VALUES(SCS_BEN_USE.NEXTVAL, codeUsuario,
	 * codeSubprogramaSede)
	 * 
	 * @param codeSubprogramaSede
	 * @param codeUsuario
	 * @return Numero de filas insertadas.
	 * 
	 */
	int insertUsuarioSubprograma(Long codeSubprogramaSede, Long codeUsuario);

	/**
	 * Metodo que consulta todas las secretarias.
	 * 
	 * @return Collection<AreaVO>
	 * 
	 */
	Collection<AreaVO> findSecretaria();

	/**
	 * Metodo que realiza un INSERT en TCS_BEN_SUBPROGRAMA_USUARIO (CODIGO,
	 * SBPR_CODIGO, USU_CODIGO, USUARIO_CREA, FECHA_CREA, TERMINAL_CREA,
	 * USUARIO_MODIFICA, FECHA_MODIFICA, TERMINAL_MODIFICA)
	 * VALUES(SCS_BEN_SUUS.NEXTVAL, arr[0], arr[1], arr[2],
	 * TO_DATE(arr[3],'dd/mm/rrrr'), arr[4], arr[5],
	 * TO_DATE(arr[6],'dd/mm/rrrr'), arr[7])
	 * 
	 * @param arr
	 *            Array con los parametros del insert.
	 * @return Numero de filas retornadas por la operacion.
	 * 
	 */
	int insertPermisosReportes(String arr[]);

	/**
	 * 
	 * @param codeUsuario
	 *            Codigo del usuario.
	 * @param codeSubprograma
	 *            Codigo del subprograma.
	 * @return
	 * 
	 */
	List<UsuarioSubprogramaVO> findPermisosUsuarios(Long codeUsuario,
			Long codeSubprograma);

	/**
	 * metodo que consulta el codigo del grupo al que pertenece el usuario dado
	 * el codigo dle usuario.
	 * 
	 * @param codeUsuario
	 *            Codigo del usuario.
	 * @return
	 * 
	 */
	List<UserVO> findGrupoUsuarios(Long codeUsuario);

	/**
	 * Metodo que consulta SBPR_CODIGO en TCS_BEN_SUBPROGRAMA_SEDE cuyo codigo =
	 * codeSubprogramaSede
	 * 
	 * @param codeSubprogramaSede
	 * @return
	 * 
	 */
	String findCodeSubprograma(Long codeSubprogramaSede);

	/**
	 * Metodo que consulta SEDE_CODIGO de la sede en TCS_BEN_SUBPROGRAMA_SEDE
	 * con CODIGO = codeSubprogramaSede
	 * 
	 * @param codeSubprogramaSede
	 * @return
	 * 
	 */
	Long findCodeSede(Long codeSubprogramaSede);

	/**
	 * 
	 * @param codeSubSede
	 * @return
	 * 
	 */
	Long findCodePrograma(Long codeSubSede);
}
